package com.sailing.xjpb.common;

import java.util.function.Consumer;

import static com.sailing.xjpb.common.EJBGenerator.convert;

/**
 * 将实现了EJBWrapper的类转换为目标对象类
 */
public interface EJBWrapper {
    /**
     * 转换为目标对象
     *
     * @param iface 目标对象字节码
     * @param <T>   目标对象类型
     * @return 目标对象
     */
    default <T> T wrap(java.lang.Class<T> iface) {
        return convert(this, iface);
    }

    /**
     * 转换为目标对象
     *
     * @param iface     目标对象字节码
     * @param <T>       目标对象类型
     * @param afterWrap 转换完成后执行函数
     * @return 目标对象
     */
    default <T> T wrap(java.lang.Class<T> iface, Consumer<T> afterWrap) {
        return convert(this, iface, afterWrap);
    }
}
